#include <stdio.h>
void print(int n, int *pre)
{
    if (pre[n] == 0)
    {
        printf("%d ", n + 1);
        return;
    }
    print(pre[n] - 1, pre);
    printf("%d ", n + 1);
}
int main()
{
    int n, nums[21] = {0}, rd[21][21] = {0}, dp[21] = {0}, pre[21] = {0}, ans, lst;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &nums[i]);
    }
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = i + 1; j < n; j++)
        {
            scanf("%d", &rd[i][j]);
        }
    }

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < i; j++)
        {
            if (rd[j][i] && dp[i] < dp[j])
            {
                dp[i] = dp[j];
                pre[i] = j + 1;
            }
        }
        dp[i] += nums[i];
        if (dp[i] > ans)
        {
            ans = dp[i];
            lst = i;
        }
    }
    // 输出dp数组
    //    printf("dp:");
    //    for (int i = 0; i < n; i++)
    //    {
    //        printf("%d ",dp[i]);
    //    }
    // 输出pre数组
    // printf("\npre:");
    // for (int i = 0; i < n; i++)
    // {
    //     printf("%d ",pre[i]);
    // }
    print(lst, pre);

    // print(n-1,pre);
    printf("\n%d", ans);
}
